服务治理 Spring Cloud Eureka

Spring Cloud Eureka是Spring Cloud Netflix 微服务套件中的一部分,基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。

服务治理

服务治理是微服务架构中最为核心和基础的模块,主要用来实现各个微服务实例的自动化注册与发现。

最开始构建微服务系统的时候可能服务并不多,可以通过做一些静态配置来完成服务的调用,但是当业务发展,静态配置变得越来越难以维护,面对不断发展的业务,我们的集群规模,服务的位置,服务的命名都有可能发生变化。为了解决微服务架构中服务实例维护问题,产生了大量服务治理框架与产品,这些框架与产品的实现都围绕着服务注册与服务发现机制来完成微服务应用实例的自动化管理。

  • 服务注册

服务治理框架中,通常有一个注册中心,每个服务单元向注册中心登记自己的服务,将主机与端口号,版本号,通信协议等一些附加信息告知注册中心。注册中心按服务名分类组织服务清单。

  • 服务发现

在服务治理框架下运作,服务间的调用不再通过指定具体的实例地址来实现。而是通过向服务名发起请求调用来实现(这样,当这个服务有多个实例时,就可以负载均衡的找到空闲的实例)。所以服务调用方在调用服务提供方接口的时候,并不知道具体的服务实例位置,因此,调用方需要向服务注册中心咨询服务,并获取所有服务的实例清单。以实现对具体服务实例的访问。

Eureka

用来实现服务注册与发现,既包含了服务端组件,也包含了客户端组件,都用Java语言编写。

Eureka服务端,也称为服务注册中心,同其他服务注册中心一样,都支持高可用配置。依托强一致性提供良好的服务实例可用性。应对多种不同的故障场景。

Eureka客户端(服务提供者,服务消费者),主要处理服务的注册发现,客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,应用程序运行时,Eureka客户端向注册中心自身提供的服务并周期性的发送心跳来更新它的服务租约。同时,也能从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。

Eureka中有三个核心角色,分别是服务注册中心,服务提供者,以及服务消费者。

服务注册中心也就是Eureka提供的服务端,提供服务注册与发现的功能,也就是前面的eureka-server.

服务提供者是提供服务的应用,可以是Spring Boot应用,也可以是其他技术平台遵循Eureka通信机制的应用,他将自己的服务注册到Eureka,以供其他应用发现。

服务消费者从服务注册中心获取服务列表,从而使消费者可以知道去何处调用其所需要的服务。

很多时候,Eureka客户端既是服务提供者又是服务消费者

Eureka配置

  • 制定注册中心

主要通过eureka.client.serviceUrl参数实现。它的配置值存储在HashMap中。并且设置有一组默认值,默认值的key为defaultZone,value=http://localhost:8761/eureka/

  • 元数据

元数据是eureka客户端在向服务注册中心发送注册请求时,用于描述自身服务信息的对象,其中包括了一些标准化的元数据,比如服务名称,实例名称,实例IP,实例端口等用于服务治理的重要信息。

  • 实例名配置

实例名,即InstanceInfo中的instanceId参数,,它是区分同一服务中不同实例的唯一标识。原生实现中,采用主机名作为默认值。我们可以采用下面的方法使用不同的端口开启同一个服务的多个实例。

1
eureka.instace.instanceId=${spring.application.name}:${random.int}

通过加随机数的方式来区别不同的实例,从而实现在同一个主机上,不指定端口就能够启动多个实例。